package com.qf.controller;

import com.qf.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;

/**
 * 演示接收各种各样参数
 * @author 千锋健哥
 */
@Controller
@RequestMapping("/param")
public class ParamController {

    /**
     * 演示接收基本数据类型
     * 规范:
     * 接收基本类型数据要求页面传参的变量名称, 必须等于controller方法接收的变量名称, 否则接收不到数据.
     * 如果传参类型不对, 则报错400, 参数错误
     */
    @RequestMapping("/test1")
    public String test1(Integer id, String name, Boolean gender, Date birth) {
        System.out.println("=====id====" + id);
        System.out.println("=====name====" + name);
        System.out.println("====gender=====" + gender);
        System.out.println("====birth=====" + birth);
        return "hello";
    }

    /**
     * 演示接收实体类类型的数据
     * 规范: 要求页面传入参数的变量名称, 必须等于接收的实体类中的属性名
     * @param user
     * @return
     */
    @RequestMapping("/test2")
    public String test2(User user) {
        System.out.println("=====id====" + user.getId());
        System.out.println("=====name====" + user.getName());
        System.out.println("====gender=====" + user.getGender());
        System.out.println("====birth=====" + user.getBirth());
        return "hello";
    }

    /**
     * 使用springMvc默认支持的参数:
     * 规范: springMvc默认支持HttpServletRequest, HttpServletResponse, HttpSession参数.
     * 这些参数需要就加上, 不需要就删掉, 可以随意根据需要使用
     * @param user
     * @return
     */
    @RequestMapping("/test3")
    public String test3(User user, HttpServletRequest request, HttpServletResponse response) {
        System.out.println("=====id====" + request.getParameter("id"));
        System.out.println("=====name====" + request.getParameter("name"));
        System.out.println("====gender=====" + user.getGender());
        System.out.println("====birth=====" + user.getBirth());
        return "hello";
    }

    /**
     * 演示接收数组类型数据
     * 规范:
     *  接收数组数据, 要求页面传入参数的名称必须等于实体类中的数组的变量名称
     *  例如: http://localhost:8080/param/test4?id=1&name=zhangsan&gender=true&birth=2000-10-08&hobby=lol&hobby=dota
     * @return
     */
    @RequestMapping("/test4")
    public String test4(User user) {
        System.out.println("=====id====" + user.getId());
        System.out.println("=====name====" + user.getName());
        System.out.println("====gender=====" + user.getGender());
        System.out.println("====birth=====" + user.getBirth());
        System.out.println("====hobby=====" + user.getHobby().toString());
        return "hello";
    }

    /**
     * restful风格传参数
     * 规范: 需要用@PathVariable注解接收占位符中的参数数据给变量传参.
     * @param id
     * @return
     */
    @RequestMapping("/test5/{idddd}/{name}")
    public String test4(@PathVariable(value = "idddd") Integer id,
                        @PathVariable(value = "name") String name) {
        System.out.println("=====id====" + id);
        System.out.println("=====name====" + name);
        return "hello";
    }
}
